package com.master.bd;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;

import com.master.ed.Cliente_ProdutoED;
import com.master.util.Excecoes;
import com.master.util.JavaUtil;
import com.master.util.Mensagens;
import com.master.util.bd.ExecutaSQL;
import com.master.util.Utilitaria;

public class Cliente_ProdutoBD {

	public Cliente_ProdutoBD() {

	}

	private ExecutaSQL executasql;

	Utilitaria util = new Utilitaria(executasql);

	public Cliente_ProdutoBD(ExecutaSQL sql) {
		this.executasql = sql;
		util = new Utilitaria(this.executasql);
	}

	public Cliente_ProdutoED inclui(Cliente_ProdutoED ed) throws Excecoes {

		String sql = null;
		try {

			ed.setOid_cliente_produto(ed.getOid_cliente()+ed.getOid_produto());

			sql = " INSERT INTO Clientes_Produtos (" + "OID_Cliente_Produto" + ", oid_Produto"
					+ ", oid_cliente, oid_classe, dm_estado_fisico, cd_onu, oid_unidade_produto, oid_especificacao_logistica, cd_dta"
					+ ") VALUES (" + util.getSQLString(ed.getOid_cliente_produto())
					+ ", " + ed.getOid_produto() + ", "
					+ util.getSQLString(ed.getOid_cliente()) + ", "
					+ ed.getOid_classe() + ", "
					+ util.getSQLString(ed.getDm_estado_fisico()) + ", "
					+ util.getSQLString(ed.getCd_onu()) + ", "
					+ ed.getOid_unidade_produto() + ", "
					+ ed.getOid_especificacao_logistica() + ", "
					+ util.getSQLString(ed.getCd_dta()) + " "
					+ ")";

			executasql.executarUpdate(sql);
			return ed;
		} catch (Mensagens exc) {
			throw exc;
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "inclui()");
		}
	}

	public void altera(Cliente_ProdutoED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " UPDATE Clientes_Produtos SET ";
			sql+= "oid_produto="+ ed.getOid_produto();
			sql+= ",oid_cliente="+ util.getSQLString(ed.getOid_cliente());
			sql+= ",oid_classe="+ ed.getOid_classe();
			sql+= ",dm_estado_fisico="+ util.getSQLString(ed.getDm_estado_fisico());
			sql+= ",cd_onu="+ util.getSQLString(ed.getCd_onu());
			sql+= ",cd_dta="+ util.getSQLString(ed.getCd_dta());
			sql+= ",oid_unidade_produto="+ed.getOid_unidade_produto();
			sql+= ",oid_especificacao_logistica="+ed.getOid_especificacao_logistica();

			sql += " WHERE oid_cliente_produto = " + util.getSQLString(ed.getOid_cliente_produto());

			executasql.executarUpdate(sql);
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "altera()");
		}
	}

	public void deleta(Cliente_ProdutoED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " DELETE FROM Clientes_Produtos WHERE oid_cliente_produto = ";
			sql += util.getSQLString(ed.getOid_cliente_produto());

			executasql.executarUpdate(sql);

		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "deleta()");
		}
	}

	public ArrayList lista(Cliente_ProdutoED ed) throws Excecoes {

		String sql = null;
		ArrayList list = new ArrayList();
		try {
			sql = " SELECT cp.*, prod.cd_produto, prod.nm_produto, p.nr_cnpj_cpf, p.nm_razao_social," +
					" cl.cd_classe_produto as cd_classe, up.cd_unidade_produto, up.nm_unidade_produto, el.cd_especificacao_logistica " +
					" FROM Pessoas p, classes_produtos cl, Clientes_Produtos cp " +
							" left join produtos prod on cp.oid_produto = prod.oid_produto " +
							" left join unidades_produtos up on cp.oid_unidade_produto = up.oid_unidade_produto " +
							" left join especificacoes_logisticas el on cp.oid_especificacao_logistica = el.oid_especificacao_logistica"
					+ " WHERE p.oid_pessoa = cp.oid_cliente " +
					  " AND cl.oid_classe_produto = cp.oid_classe ";
			if (JavaUtil.doValida(ed.getOid_cliente())) {
				sql += " and cp.oid_cliente = " + util.getSQLString(ed.getOid_cliente());
			}
			if (ed.getOid_produto() > 0) {
				sql += " and cp.oid_produto = " + ed.getOid_produto();
			}
			if (JavaUtil.doValida(ed.getOid_cliente_produto())) {
				sql += " and cp.oid_cliente_produto = " + util.getSQLString(ed.getOid_cliente_produto());
			}

			sql += " ORDER BY cp.oid_cliente, cp.oid_classe, cp.oid_cliente_produto";

//// ("cliente_produto: "+sql);

			ResultSet res = this.executasql.executarConsulta(sql);
			while (res.next()) {
				Cliente_ProdutoED edVolta = new Cliente_ProdutoED();

				edVolta.setOid_cliente_produto(res.getString("oid_Cliente_Produto"));
				edVolta.setOid_produto(res.getInt("oid_Produto"));
				edVolta.setOid_cliente(res.getString("oid_Cliente"));
				edVolta.setOid_classe(res.getLong("oid_classe"));
				edVolta.setOid_unidade_produto(res.getLong("oid_unidade_produto"));

				edVolta.setCd_produto(res.getString("cd_produto"));
				edVolta.setNm_produto(res.getString("nm_produto"));
				edVolta.setNr_cnpj_cpf(res.getString("nr_cnpj_cpf"));
				edVolta.setNm_razao_social(res.getString("nm_razao_social"));
				edVolta.setCd_classe(res.getString("cd_classe"));
				edVolta.setCd_unidade_produto(res.getString("cd_unidade_produto"));
				edVolta.setNm_unidade_produto(res.getString("nm_unidade_produto"));

				edVolta.setDm_estado_fisico(util.getValueDef(res.getString("dm_estado_fisico"),""));
				edVolta.setCd_onu(util.getValueDef(res.getString("cd_onu"),""));
				edVolta.setCd_dta(util.getValueDef(res.getString("cd_dta"),""));

				edVolta.setOid_especificacao_logistica(res.getLong("oid_especificacao_logistica"));
				edVolta.setCd_especificacao_logistica(res.getString("cd_especificacao_logistica"));

				list.add(edVolta);

			}
			return list;
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "lista()");
		}

	}

	public Cliente_ProdutoED getByRecord(Cliente_ProdutoED ed) throws Excecoes {

		try {
			Iterator it = this.lista(ed).iterator();
			if (it.hasNext())
				return (Cliente_ProdutoED) it.next();
			else
				return new Cliente_ProdutoED();
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "getByRecord()");
		}
	}

	public ArrayList getAllClasses() throws Excecoes {

		String sql = null;
		ArrayList list = new ArrayList();
		try {
			sql = " SELECT * FROM classes_produtos ORDER BY cd_classe_produto ";

			// (sql);

			ResultSet res = this.executasql.executarConsulta(sql);
			while (res.next()) {
				Cliente_ProdutoED edVolta = new Cliente_ProdutoED();

				edVolta.setOid_classe(res.getLong("oid_classe_produto"));

				edVolta.setCd_classe(res.getString("cd_classe_produto"));

				list.add(edVolta);

			}
			return list;
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "getAllClasses()");
		}

	}

}
